package app.modules.menu.persistence.dao;

import app.modules.menu.dto.biz.MenuFunctionRelationDTO;
import app.modules.menu.persistence.mapper.MenuFunctionRelationMapper;
import app.modules.security.dto.web.function.WebFunctionDTO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jasmine.framework.database.mybatisplus.dao.BaseEntityDAO;
import jasmine.security.rbac.model.SecMenuFunctionRelation;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author mh.z
 */
@Repository
public class MenuFunctionRelationDAO extends
        BaseEntityDAO<MenuFunctionRelationMapper, SecMenuFunctionRelation> {

    /**
     * 返回指定菜单模板下的功能关联关系
     *
     * @param templateId
     * @return
     */
    public List<MenuFunctionRelationDTO> listRelationsByTemplate(Long templateId) {
        return baseMapper.listRelationsByTemplate(templateId);
    }

    /**
     * 查询指定菜单的所有已分配功能
     *
     * @param menuId
     * @return
     */
    public List<WebFunctionDTO> listAssignedFunctions(Long menuId) {
        return baseMapper.listAssignedFunctions(menuId);
    }

    /**
     * 删除指定菜单的所有功能分配关系
     *
     * @param menuId
     */
    public void deleteByMenuId(Long menuId) {
        LambdaQueryWrapper<SecMenuFunctionRelation> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(SecMenuFunctionRelation::getMenuId, menuId);

        baseMapper.delete(wrapper);
    }

    /**
     * 删除指定功能的所有菜单分配关系
     *
     * @param functionId
     */
    public void deleteByFunctionId(Long functionId) {
        baseMapper.deleteByFunctionId(functionId);
    }

    /**
     * 查询指定用户已分配角色对应的菜单功能关系
     *
     * @param templateCode
     * @param userId
     * @return
     */
    public List<SecMenuFunctionRelation> listByTemplateAndUser(String templateCode, Long userId) {
        return baseMapper.listByTemplateAndUser(templateCode, userId);
    }

}
